<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>借用原型对象继承方法</title>
</head>
<body>
  <script>
    // 借用父构造函数继承属性
    // 1. 父构造函数
    function Father (uname, age) {
      // this 指向父构造函数的对象实例
      this.uname = uname
      this.age = age
    }

    Father.prototype.money = function () {
      console.log(100000)
    }

    // 2 .子构造函数
    function Son (uname, age, score) {
      // this 指向子构造函数的对象实例
      Father.call(this, uname, age)
      this.score = score
    }

    // Son.prototype = Father.prototype  这样直接赋值会有问题,如果修改了子原型对象,父原型对象也会跟着一起变化
    Son.prototype = new Father()
    // Son.prototype.__proto__ = Father.prototype   用这个就可以不constructor指回去了

    // 如果利用对象的形式修改了原型对象,别忘了利用constructor 指回原来的构造函数
    Son.prototype.constructor = Son
    // 这个是子构造函数专门的方法
    Son.prototype.exam = function () {
      console.log('孩子要考试')
    }
    var son = new Son('刘德华', 18, 100)
    console.log(son)
    console.log(Father.prototype)
    console.log(Son.prototype.constructor)
    console.log(Son.prototype.__proto__ === Object.prototype) // false
  </script>
</body>
</html>